// MAP FUNCTIONALITY...
var GoogleMap = (function () {
  return {
    /**
     * Con esta función, se añade un marcador al mapa.
     */
    addMarker : function (imgSrc, latLng, data, onClick, dad) {
      if (imgSrc) {
        var marker = new google.maps.Marker({
          icon: imgSrc,
          map : this.map,
          position: latLng,
          data: data
        });

        marker.dad = dad;

        if (onClick) {
          marker.addListener('click', onClick);
        }

        this.collection.push(marker);
        return marker;
      }
    },
    clearMarkers : function () {
      var i;
      for (i=0; i<this.collection.length; i++) {
        this.collection[i].setMap(null);
      }
      this.collection = [];
    },
    resetMarkers : function () {
      this.clearMarkers();
      Request.allMarkers();
    },
    initMap : function () {
      google.maps.visualRefresh = true;

      // sus opciones
      var mapOptions = {
        center: new google.maps.LatLng(-16.503952, -68.129520),
        zoom: 10,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };

      // Creando el mapa
      var mapElement = document.getElementById('mapDiv');
      GoogleMap.map = new google.maps.Map(mapElement, mapOptions);



      google.maps.event.addListener(GoogleMap.map, 'click', function(e) {
        if (AddAction.index && AddAction.index !== '6') {
          AddAction.add(e.latLng);
        }
      });

      /**
       * Cargando todos los marcadores
       */
      google.maps.event.
        addListener(GoogleMap.map, 'bounds_changed', function () {
          GoogleMap.resetMarkers();
          console.log('recalculando los marcadores');
        });
    },
    obtenerBounds : function () {
      var x1, y1, x2, y2, bounds;

      bounds = this.map.getBounds();
      x1 = bounds.getSouthWest().lng();
      y1 = bounds.getNorthEast().lat();

      x2 = bounds.getNorthEast().lng();
      y2 = bounds.getSouthWest().lat();

      /**
       * bounds:
       * [0]: izquierda superior
       * [1]: derecha inferior
       */
      return [
        {
          lat : y1,
          lng : x1
        }, {
          lat : y2,
          lng : x2
        }
      ];
    },
    cargarMarcadores : function(arrayDeMarcadores) {

      google.maps.visualRefresh = true;

      // la funcion recibe un array de objetos donde {lat, lng, img}
      // recoremos el array para mostrar los marcadores
      for(var i = 0;i < arrayDeMarcadores.length; i++){
        objLatLng = {
          lat : arrayDeMarcadores[i].lat,
          lng : arrayDeMarcadores[i].lng
        };

        this.addMarker(arrayDeMarcadores[i].img,
                       objLatLng,
                       arrayDeMarcadores[i].datos,
                       Request.consultarMarcador);
      }

    },
    collection : []
  };
})();
